package com.tfjybj.itoo.teach.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.teach.entity.ElectiveCoursePubEntity;
import com.tfjybj.itoo.teach.model.ElectiveCoursePubModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * ElectiveCoursePubDao接口
 * electiveCoursePub表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
@Repository("electiveCoursePubDao")
public interface ElectiveCoursePubDao extends BaseMapper<ElectiveCoursePubEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据课程_id模糊查询electiveCoursePub
     *
     * @param courseId 课程_id
     * @return 模糊查询的electiveCoursePub集合
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<ElectiveCoursePubEntity> queryLikeCourseId(@Param("courseId") String courseId);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据课程ID和学年ID查询公选课培养计划
     *
     * @param courseId   课程ID
     * @param semesterId 学年ID
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018/11/14 15:39
     */
    List<ElectiveCoursePubModel> queryByCoSeId(@Param("courseId") String courseId, @Param("semesterId") String semesterId);

    /**
     * 根据学年学期ID分页查询公选课培养计划
     *
     * @param semesterId 学年学期ID
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-15 10:39:08
     */
    List<ElectiveCoursePubModel> queryAllBySemesterId(@Param("semesterId") String semesterId);

    /**
     * 默认分页查询所有的公选课培养计划
     *
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-15 11:25:36
     */
    List<ElectiveCoursePubModel> queryAllEcpPlan();

    /**
     * 根据公选课培养计划ID查询公选课培养计划详情
     *
     * @param idList 公选课培养计划ID
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018/11/15 19:11
     */
    List<ElectiveCoursePubModel> queryEcpPlanById(@Param("idList") List<String> idList);

    /**
     * 根据条件导出培养计划
     *
     * @param academyId  学院Id
     * @param semesterId 学期ID
     * @param strLike    模糊条件
     * @return 导出结果信息
     * @author 李建帅
     * @since 2.0.0 2018-11-25 11:34:25
     */
    List<ElectiveCoursePubModel> exportByStrLike(@Param("academyId") String academyId, @Param("semesterId") String semesterId, @Param("strLike") String strLike);

    /**
     * 根据学年学期ID查询公选课课程ID集合
     *
     * @param semesterId 学年学期Id
     * @return 公选课课程ID集合
     * @author 李建帅
     * @since 2.0.0 2018/11/18 8:22
     */
    List<String> queryCourseIdBySemesterId(@Param("semesterId") String semesterId);

    /**
     * 根据课程名称模糊查询公选课培养计划
     *
     * @param strLike 模糊查询条件（课程名称）
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018/11/19 9:15
     */
    List<ElectiveCoursePubModel> queryByStrLike(@Param("strLike") String strLike);

    /**
     * 根据条件查询公选课培养计划
     *
     * @param semesterId 学期ID
     * @param academyId  学院Id
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-19 10:28:18
     */
    List<ElectiveCoursePubModel> queryBySemAcaId(@Param("semesterId") String semesterId, @Param("academyId") String academyId);

    /**
     * 根据学年ID和课程id判断该培养计划是否已经存在
     *
     * @param semesterId 学年Id
     * @param courseId   课程Id
     * @return id
     * @author 李建帅
     * @since 2.0.0 2018/11/24 15:29
     */
    String findIdIsExist(@Param("semesterId") String semesterId, @Param("courseId") String courseId);
}
